From 241a009938f4158534f7fa0f06ea825ad1d880d5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Tue, 30 May 2017 16:20:01 +0200 Subject: [PATCH] widget: Adapt translate_coordinates to coordinate changes --- gtk/gtkwidget.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 47fb6d2e95..8e830555e4 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -6951,21 +6951,24 @@ static void translate_coordinates (GdkEvent *event, GtkWidget *widget) { - GtkWidget *event_widget; - gdouble xd, yd; - gint x, y; + double x, y; - if (!gdk_event_get_coords (event, &xd, &yd)) + if (!gdk_event_get_coords (event, &x, &y)) return; - event_widget = gtk_get_event_widget (event); - /* FIXME: loses precision */ - x = xd; - y = yd; - gtk_widget_translate_coordinates (event_widget, widget, - x, y, &x, &y); + /* @event's coordinates are in toplevel coordinates, so we can simply + * walk up the hierarchy starting at @widget to translate the coordinates. */ + while (widget) + { + GtkAllocation alloc; + + _gtk_widget_get_allocation (widget, &alloc); + x -= alloc.x; + y -= alloc.y; + + widget = _gtk_widget_get_parent (widget); + } - /*g_message ("New coords for %p: %d/%d (widget %s)", event, x, y, G_OBJECT_TYPE_NAME (widget));*/ gdk_event_set_coords (event, x, y); } -- 2.30.2